package com.design.working.service;


import com.design.working.dto.*;
import com.design.working.dto.dept.*;
import com.design.working.vo.*;
import com.design.working.vo.admin.StudentApplicationDetailVO;
import com.design.working.vo.admin.StudentApplicationExaminationVO;
import com.design.working.vo.admin.StudentMsgVO;
import com.design.working.vo.dept.*;

import java.util.List;

public interface DeptService {

    /**
     * 查找本部门未审批的学生岗位申请记录
     *
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的本部门未审批的学生岗位申请记录
     */
    ResponseVO<List<DeptHandleStudentWorkApplicationVO>> selectStudentWorkApplication(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 审批学生的岗位申请
     *
     * @param uid 部门员工工号
     * @param deptHandleStudentApplicationDTO 部门员工对学生申请记录的审批内容
     */
    void insertStudentApplicationHanding(Integer uid, DeptHandleStudentApplicationDTO deptHandleStudentApplicationDTO);

    /**
     * 查找申请表中学生申请工作填写的个人信息
     *
     * @param smtId 学生申请工作表中对应的个人信息记录id
     * @return 学生申请工作填写的个人信息
     */
    ResponseVO<StudentApplicationDetailVO> selectStudentApplicationDetail(Integer smtId);

    /**
     * 查找辅导员对学生申请表的意见
     *
     * @param swaId 学生申请工作表id
     * @return 辅导员对学生申请表的意见
     */
    ResponseVO<DeptPreAdviceVO> selectStudentPreAdvice(Integer swaId);

    /**
     * 查询学生岗位变动申请
     *
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的本部门未审批的学生岗位变动申请
     */
    ResponseVO<List<DeptHandleStudentWorkMotionVO>> selectStudentWorkMotion(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 插入部门员工处理的学生岗位变更表意见
     *
     * @param uid                        部门员工uid
     * @param deptHandleStudentMotionDTO 前端传来的表单数据
     */
    void insertStudentMotionHanding(Integer uid, DeptHandleStudentMotionDTO deptHandleStudentMotionDTO);

    /**
     * 查询岗位学生信息
     *
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的本部门的岗位学生信息
     */
    ResponseVO<List<DeptSelectJobStudentInfoVO>> selectJobStudentInfo(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过学号姓名查询岗位学生信息
     *
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @param stuUid         学生学号
     * @param studentName    学生姓名
     * @return 查询到的本部门的岗位学生信息
     */
    ResponseVO<List<DeptSelectJobStudentInfoVO>> selectJobStudentInfoByName(Integer uid, PageControlDTO pageControlDTO, String stuUid, String studentName);

    /**
     * 查询学生详细信息
     *
     * @param uid 学生学号
     * @return 学生个人详细信息
     */
    ResponseVO<StudentMsgVO> selectStudentMsg(Integer uid);

    /**
     * 查询当前部门员工所属部门的学生岗位申请信息
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的本部门的学生岗位申请信息
     */
    ResponseVO<List<DeptSelectStudentApplicationVO>> selectStudentApplicationRecord(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过学号姓名查询当前部门员工所属部门的学生岗位申请信息
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @param stuUid         学生学号
     * @param studentName    学生姓名
     * @return 查询到的本部门的学生岗位申请信息
     */
    ResponseVO<List<DeptSelectStudentApplicationVO>> selectStudentApplicationRecordByName(Integer uid, PageControlDTO pageControlDTO, String stuUid, String studentName);

    /**
     * 查询学生岗位申请的审批详情
     * @param swaId 学生岗位申请表id
     * @return 学生岗位申请审批详情
     */
    ResponseVO<StudentApplicationExaminationVO> selectStuAppExamination(Integer swaId);

    /**
     * 查询当前部门领导所属部门的全部在运行岗位
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的当前部门领导所属部门的全部在运行岗位
     */
    ResponseVO<List<DeptSelectWorkingJobVO>> selectDeptWorkingJob(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过岗位名称查询当前部门领导所属部门的在运行岗位
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门领导所属部门的在运行岗位
     */
    ResponseVO<List<DeptSelectWorkingJobVO>> selectDeptWorkingJobByName(Integer uid, PageControlDTO pageControlDTO, String jobName);

    /**
     * 插入部门领导申请删除岗位的申请信息
     *
     * @param uid                       部门员工工号
     * @param deptDeleteJobMotionDTO    前端传来的申请信息
     */
    void insertDeptDeleteJobMotion(Integer uid, DeptDeleteJobMotionDTO deptDeleteJobMotionDTO);

    /**
     * 插入部门领导申请发布岗位的申请信息
     *
     * @param uid                       部门员工工号
     * @param deptAddJobApplicationDTO  前端表单传来的信息
     */
    void insertDeptAddJobApplication(Integer uid, DeptAddJobApplicationDTO deptAddJobApplicationDTO);

    /**
     * 查询当前部门领导的岗位申请的审核信息
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的当前部门领导的岗位申请的审核信息
     */
    ResponseVO<List<DeptJobApplicationHandleVO>> selectAddJobAppHandleRecord(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过岗位名称查询当前部门领导的发布岗位申请的审核信息
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门领导的发布岗位申请的审核信息
     */
    ResponseVO<List<DeptJobApplicationHandleVO>> selectAddJobAppHandleRecordByName(Integer uid, PageControlDTO pageControlDTO, String jobName);

    /**
     * 查询当前发布岗位申请的审批信息
     * @param djaId 学生岗位申请表id
     * @return 查询到的当前发布岗位申请的审批信息
     */
    ResponseVO<DeptJobAppExaminationVO> selectAddJobAppExamination(Integer djaId);

    /**
     * 查询当前部门领导的删除岗位申请的审核信息
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的当前部门领导的删除岗位申请的审核信息
     */
    ResponseVO<List<DeptJobApplicationHandleVO>> selectDeleteJobAppHandleRecord(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过岗位名称查询当前部门领导的删除岗位申请的审核信息
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门领导的删除岗位申请的审核信息
     */
    ResponseVO<List<DeptJobApplicationHandleVO>> selectDeleteJobAppHandleRecordByName(Integer uid, PageControlDTO pageControlDTO, String jobName);

    /**
     * 查询当前删除岗位申请的审批信息
     * @param djmId 学生岗位变动表id
     * @return 查询到的当前删除岗位申请的审批信息
     */
    ResponseVO<DeptJobAppExaminationVO> selectDeleteJobAppExamination(Integer djmId);

    /**
     * 查询当前部门员工是否为部门领导（领导才能发布/删除岗位和查询岗位审核记录）
     *
     * @param  uid  部门员工工号
     * @return true-是; false-不是
     */
    boolean isLeaderToDept(Integer uid);

    /**
     * 查询当前部门员工所属部门的全部已下线岗位
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的当前部门员工所属部门的全部已下线岗位
     */
    ResponseVO<List<DeptSelectOfflineJobVO>> selectDeptOfflineJob(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过岗位名称查询当前部门员工所属部门的已下线岗位
     * @param uid         部门员工工号
     * @param pageControlDTO 分页信息
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门员工所属部门的已下线岗位
     */
    ResponseVO<List<DeptSelectOfflineJobVO>> selectDeptOfflineJobByName(Integer uid, PageControlDTO pageControlDTO, String jobName);

    /**
     * 查询该部门已下线岗位的下线审核信息
     * @param jobId 岗位id
     * @return 查询到的该部门已下线岗位的下线审核信息
     */
    ResponseVO<DeptOfflineJobExaminationVO> selectDeptOfflineJobExamination(Integer jobId);

    /**
     * 查询目前属于在岗状态的岗位学生信息
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的目前属于在岗状态的岗位学生信息
     */
    ResponseVO<List<DeptSelectWorkingJobStudentVO>> selectDeptWorkingJobStudent(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过学号姓名查询目前属于在岗状态的岗位学生信息
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @param stuUid         学生学号
     * @param studentName    学生姓名
     * @return 查询到的目前属于在岗状态的岗位学生信息
     */
    ResponseVO<List<DeptSelectWorkingJobStudentVO>> selectDeptWorkingJobStudentByName(Integer uid, PageControlDTO pageControlDTO, String stuUid, String studentName);

    /**
     * 插入部门员工考勤学生岗位信息
     *
     * @param uid                         部门员工工号
     * @param deptHandleStudentAttendDTO  前端表单传来的考勤信息
     */
    void insertDeptStudentAttendInfo(Integer uid, DeptHandleStudentAttendDTO deptHandleStudentAttendDTO);

    /**
     * 查询该部门岗位的学生考勤记录
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的该部门岗位的学生考勤记录
     */
    ResponseVO<List<DeptStudentAttendanceRecordVO>> selectDeptStudentAttendance(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过条件（学号姓名时间）查询该部门岗位的学生考勤记录
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @param searchDTO 搜索的信息
     * @return 查询到的通过条件（学号姓名时间）查询该部门岗位的学生考勤记录
     */
    ResponseVO<List<DeptStudentAttendanceRecordVO>> selectDeptStudentAttendanceByLimit(Integer uid, PageControlDTO pageControlDTO, SearchDeptStudentAttendanceDTO searchDTO);

    /**
     * 查询目前属于结岗/离岗状态的岗位学生信息
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的目前属于结岗/离岗状态的岗位学生信息
     */
    ResponseVO<List<DeptSelectEndJobStudentVO>> selectDeptEndJobStudent(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 插入部门员工对学生的用工评价
     *
     * @param uid                         部门员工工号
     * @param deptEvaluateStudentDTO   前端表单传来的评价信息
     */
    void insertDeptEvaluateStuInfo(Integer uid, DeptEvaluateStudentDTO deptEvaluateStudentDTO);

    /**
     * 查询历史评价记录
     * @param uid            部门员工工号
     * @param pageControlDTO 分页信息
     * @return 查询到的历史评价记录
     */
    ResponseVO<List<DeptEvaluateRecordVO>> selectDeptEvaluateRecord(Integer uid, PageControlDTO pageControlDTO);
}
